<script>
  //   给定一个长度为 n 的整数数组 height 。有 n 条垂线，第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。

  //   找出其中的两条线，使得它们与 x 轴共同构成的容器可以容纳最多的水。

  //   返回容器可以储存的最大水量。

  //   说明：你不能倾斜容器。

  //   输入：[1,8,6,2,5,4,8,3,7]
  //   输出：49
  //   解释：图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下，容器能够容纳水（表示为蓝色部分）的最大值为 49。

  //   输入：height = [1,1]
  //   输出：1

  // **** 题源：leetcode 11  https://leetcode.cn/problems/container-with-most-water/

  /**
   * 分析
   * 双指针思路 left = 0  right = 容器.length - 1
   * 设两个指针 left right 指向容器的高度 height[left] height[right]
   * 此时容器的面积 高*宽 S = min(height[left],height[right])*(right - left)
   * min(height[left],height[right]) 也就是取其中最小值也就是高度
   * (right - left) 算出宽度
   * 求得公式以后 进行循环
   * 无论是移动短板或者长板，我们都只关注移动后的新短板会不会变长，而每次移动的木板都只有三种情况，比原短板短，
   * 比原短板长，与原短板相等；如向内移动长板，对于新的木板：1.比原短板短，则新短板更短。2.与原短板相等或者比原
   * 短板长，则新短板不变。所以，向内移动长板，一定不能使新短板变长。
   * 两个指针移动
   * left < right 如果两指针 相等 就不在进行循环
   * 如果左边的板子 小于 右边的板子 那么left指针向右移动 left++
   * 如果左边的板子 大于 右边的板子 那么right指针向左移动 right--
   * 每次移动 计算一下面积 在 比较 和上次的面积 保留最大值
   * 一直循环 直到两指针相遇
   */

  /**
   * @param {number[]} height
   * @return {number}
   */
  var maxArea = function (height) {
    let left = 0,
      right = height.length - 1,
      result = 0;
    while (left < right) {
      result =
        height[left] < height[right]
          ? Math.max(result, (right - left) * height[left++])
          : Math.max(result, (right - left) * height[right--]);
    }
    return result;
  };
</script>
